package cn.xzqwjw.taskmanager.domain.vo;

import cn.xzqwjw.taskmanager.common.customEnum.ResponseCodeEnum;
import lombok.Data;
import org.springframework.stereotype.Component;

/**
 * 上传文件的配置DTO
 *
 * @author rush
 */
@Data
@Component
public class UploadConfigVo {

  /*
    constantChar                字符串常量，用来起随机的目录名或者文件名
    opFlag                      上传是否成功的标志
    opMsg                       上传过程中的信息
    pathRootPhysics             服务器端文件保存的根目录名，默认为 D:\\upload_file
    pathEntire                  服务器端文件保存的完整路径（包括物理路径）
    pathRelative                服务器端文件保存的相对路径（不包括物理路径）
    serverFileName              服务器端文件名（不包括扩展名）
    fileNameShow                用于界面显示的文件名（只有文件名）
    clientFileName              客户端文件名（不包括物理路径）
    clientFileNameEntire        客户端文件路径+文件名+扩展名（完整路径，包括硬盘路径）
    extName                     扩展名
    serverFileNameEntire        服务器端文件保存路径+文件名+扩展名（完整路径，包括硬盘物理路径）
    serverFileNameEntireWithWm  生成水印后的图像文件路径+文件名+扩展名（完整路径，包括硬盘路径）
    allowedExt                  允许上传的文件扩展名，只读属性
    allowedExtImg               允许上传的图像文件扩展名，只读属性
    allowedSizeImg              允许上传的图像文件大小
    allowedSizeDoc              允许上传的文本文件大小
    allowedSizeZip              允许上传的压缩文件大小
    allowedSizeMedia            允许上传的多媒体文件大小
    flagWaterMarkTxt            是否使用文本水印
    waterMarkTxtString          文本水印字符串
    waterMarkTxtFont            文本水印文本字体
    waterMarkTxtSize            文本水印文本大小
    waterMarkTxtColor           文本水印文本颜色
    flagWaterMarkImg            是否使用图片水印标志
    waterMarkImagePath          服务器端的水印文件路径
    waterMarkMarginTop          水印的上边距
    waterMarkMarginRight        水印的右边距
    waterMarkMarginBottom       水印的下边距
    waterMarkMarginLeft         水印的左边距
    waterMarkTransparent        水印透明度
    flagThumb                   是否生成缩略图标志
    thumb1FileNameEntire        服务器端缩略图小文件保存路径+文件名+扩展名（完整路径，包括硬盘物理路径）
    thumb2FileNameEntire        服务器端缩略图中文件保存路径+文件名+扩展名（完整路径，包括硬盘物理路径）
    thumb3FileNameEntire        服务器端缩略图大文件保存路径+文件名+扩展名（完整路径，包括硬盘物理路径）
    compressRatio               压缩率
    fileSize                    文件大小
    mimeType                    文件的MimeType
    picWidth                    图像文件的宽度
    picHeight                   图像文件的高度
  */

  /**
   * 字符串常量，用来起随机的目录名或者文件名
   */
  private final char[] constantChar = {
      '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
      'a', 'b', 'c', 'd', 'e',
      'f', 'g', 'h', 'i', 'j',
      'k', 'l', 'm', 'n', 'o',
      'p', 'q', 'r', 's', 't',
      'u', 'v', 'w', 'x', 'y', 'z',
      'A', 'B', 'C', 'D', 'E',
      'F', 'G', 'H', 'I', 'J',
      'K', 'L', 'M', 'N', 'O',
      'P', 'Q', 'R', 'S', 'T',
      'U', 'V', 'W', 'X', 'Y', 'Z'};

  /**
   * 操作标志
   */
  private Boolean opFlag = false;

  /**
   * 操作信息
   */
  private ResponseCodeEnum opMsg;

  /**
   * 服务器端文件保存的根目录名，默认为 D:\\upload_file
   */
  private String pathRootPhysics = CustomOptionVo.getUlRootDir();

  /**
   * 服务器端文件名（不包括路径，不包括扩展名）
   */
  private String serverFileName = "";

  /**
   * 用于界面显示的文件名（只有文件名）
   */
  private String fileNameShow = "";

  /**
   * 客户端文件名（不包括路径，包括扩展名）
   */
  private String clientFileName = "";

  /**
   * 文件扩展名（包括 .）
   */
  private String extName = "";

  /**
   * 服务器端文件保存的完整路径（包括物理路径）
   */
  private String pathEntire = "";

  /**
   * 服务器端文件保存的相对路径（不包括物理路径）
   */
  private String pathRelative = "";

  /**
   * 服务器端文件保存路径+文件名+扩展名（完整路径，包括硬盘物理路径）
   */
  private String serverFileNameEntire = "";

  /**
   * 生成水印后的图像文件路径+文件名+扩展名（完整路径，包括硬盘路径）
   */
  private String serverFileNameEntireWithWm = "";

  /**
   * 客户端文件路径+文件名+扩展名（完整路径，包括硬盘路径）
   */
  private String clientFileNameEntire = "";

  /**
   * 允许上传什么类型的文件
   */
  private String allowedExt = ".jpg,.jpeg,.gif,.png,.bmp," +
      ".txt,.doc,.docx," +
      ".xls,.xlsx,.chm,.pdf,.zip," +
      ".rar,.7z,.avi,.flv,.mp4,.wma,.mpg," +
      ".mpeg,.mp3,.wav,.swf";

  /**
   * 允许上传什么类型的图像文件
   */
  private String allowedExtImg = ".jpg,.jpeg,.gif,.png,.bmp";

  /**
   * 允许上传的图像文件大小，以K为单位
   */
  private Long allowedSizeImg = 10240L;

  /**
   * 允许上传的文本文件大小
   */
  private Long allowedSizeDoc = 10240L;

  /**
   * 允许上传的压缩文件大小
   */
  private Long allowedSizeZip = 51200L;

  /**
   * 允许上传的多媒体文件大小
   */
  private Long allowedSizeMedia = 512000L;

  /**
   * 是否使用文本水印
   */
  private Boolean flagWaterMarkTxt = false;

  /**
   * 文本水印字符串
   */
  private String waterMarkTxtString = "信州区图书馆";

  /**
   * 文本水印文本字体
   */
  private String waterMarkTxtFont = "Verdana";

  /**
   * 文本水印文本大小
   */
  private float waterMarkTxtSize = 16f;

  /**
   * 文本水印文本颜色
   */
  private String waterMarkTxtColor = "#FF0000";

  /**
   * 是否使用图片水印标志
   */
  private Boolean flagWaterMarkImg = false;

  /**
   * 水印文件服务器端路径
   */
  private String waterMarkImagePath = "static/image/water_mask.png";

  /**
   * 水印的上边距
   */
  private Integer waterMarkMarginTop = 10;

  /**
   * 水印的右边距
   */
  private Integer waterMarkMarginRight = 10;

  /**
   * 水印的下边距
   */
  private Integer waterMarkMarginBottom = 10;

  /**
   * 水印的左边距
   */
  private Integer waterMarkMarginLeft = 10;

  /**
   * 水印透明度
   */
  private Float waterMarkTransparent = 0.4F;

  /**
   * 是否生成缩略图标志
   */
  private Boolean flagThumb = true;

  /**
   * 服务器端缩略图小文件保存路径+文件名+扩展名（完整路径，包括硬盘物理路径）
   */
  private String thumb1FileNameEntire = "";

  /**
   * 服务器端缩略图中文件保存路径+文件名+扩展名（完整路径，包括硬盘物理路径）
   */
  private String thumb2FileNameEntire = "";

  /**
   * 服务器端缩略图大文件保存路径+文件名+扩展名（完整路径，包括硬盘物理路径）
   */
  private String thumb3FileNameEntire = "";

  /**
   * 压缩率
   */
  private Double compressRatio = 0.9;

  /**
   * 文件大小
   */
  private Long fileSize = 0L;

  /**
   * 文件的MimeType
   */
  private String mimeType = "";

  /**
   * 图像文件的宽度
   */
  private Integer picWidth = 0;

  /**
   * 图像文件的高度
   */
  private Integer picHeight = 0;

}
